
#pragma once

#include <string>

namespace net{

    std::string Code2String(const int code);

    template<class T>
    std::string FormatStringError(const int code, const T& msg)
    {
        return "ERROR(" + std::to_string(code) + "): " + msg;
    }

    template<class T>
    std::string DefaultMessageError(const T& msg, int code)
    {
        const auto tab = std::string(" ");
        return FormatStringError(code, msg + tab + Code2String(code));
    }
    template<class T>
    std::string DefaultMessageError(const T& msg)
    {
        return DefaultMessageError(msg, WSAGetLastError() );
    }

    template<class Exception, class Message>
    void Raise(const Message& msg)
    {
        throw  Exception(DefaultMessageError(msg));
    }

}//namespace net

